Sıfırdan Milis Linux Yapımı
===================================

.. toctree::
   :maxdepth: 2
   :caption: Contents:

.. warning::
    Test aşamasındadır. Lütfen kullanmayınız!


0. Önsistemi oluşturmak için gerekli paketler kurulur:

.. code:: bash

    # Milis 
    mps kur lua (luafileystem kaynak kodundan derlenecek.)
    # ------------------------
    # Arch
    pacman -S base-devel
    pacman -S bison
    pacman -S libarchive
    pacman -S lua
    pacman -S lzip
    pacman -S squashfs-tools
    pacman -S xorriso
    # ------------------------
    #  Ubuntu ve türevleri için
    apt install build-essential
    apt install bison
    apt install bsdtar
    apt install lua5.3
    apt install liblua5.3
    apt install lzip
    apt install squashfs-tools
    apt install xorriso

1. Yetkili komut satırına geçerek Milis LFS kullanıcı dizinlerini ayarlanır:

.. code:: bash

    sudo su

    groupadd mlfs
    useradd -s /bin/bash -g mlfs -m -k /dev/null mlfs
    passwd mlfs 

2. Milis 2.0 deposu klonlanıp önsistem için gerekli dizinler oluşturulur:

.. code:: bash

    git clone https://notabug.org/milislinux/milis19 /home/mlfs/milis
    git clone https://notabug.org/milislinux/mps /home/mlfs/mps

    cp /home/mlfs/milis/bashrc-onsistem.temp /home/mlfs/.bashrc
    cp /home/mlfs/milis/bash_profile.temp /home/mlfs/.bash_profile

    mkdir -p /home/mlfs/{onsistem,sources}
    mkdir -p /home/mlfs/onsistem/tools
    ln -sv /home/mlfs/onsistem/tools /
    ln -sv /home/mlfs/sources /

    chown -R mlfs:mlfs /home/mlfs

3. Önsistemi oluşturmayı başlatmak için mlfs kullanıcısıyla giriş yapılır:

.. code:: bash

    su - mlfs

    source ~/.bash_profile

4. İzin ve ortam değişkenleri kontrol edilir:

.. code:: bash

    mlfs@makine1:~$ ls -al

    drwxr-xr-x 7 mlfs mlfs 4096 May  5 15:09 .
    drwxr-xr-x 4 root root 4096 May  5 14:32 ..
    -rw------- 1 mlfs mlfs  166 May  5 15:17 .bash_history
    -rw-r--r-- 1 mlfs mlfs   59 May  5 14:55 .bash_profile
    -rwxr-xr-x 1 mlfs mlfs  327 May  5 15:17 .bashrc
    drwxr-xr-x 4 mlfs mlfs 4096 May  5 15:15 milis
    drwxr-xr-x 2 mlfs mlfs 4096 May  5 15:06 mps
    drwxr-xr-x 3 mlfs mlfs 4096 May  5 15:06 onsistem
    drwxr-xr-x 2 mlfs mlfs 4096 May  5 15:09 sources

    mlfs@makine1:~$ export
    declare -x HOME="/home/mlfs"
    declare -x LC_ALL="POSIX"
    declare -x MILIS_HOME="/home/mlfs"
    declare -x MILIS_REPO="/home/mlfs/milis"
    declare -x MPS_NOROOT="yes"
    declare -x MPS_PATH="/home/mlfs/mps"
    declare -x OLDPWD
    declare -x ONSISTEM_CHROOT="/home/mlfs/onsistem"
    declare -x ONSISTEM_TARGET="x86_64-milis-linux-gnu"
    declare -x PATH="/home/mlfs/mps/bin:/tools/bin:/usr/local/bin:/bin:/sbin:/usr/sbin:/usr/bin:/root/bin"                                               
    declare -x PS1="\${debian_chroot:+(\$debian_chroot)}\\u@\\h:\\w\\\$ "
    declare -x PWD="/home/mlfs"
    declare -x SHLVL="1"
    declare -x TALIMATNAME="/home/mlfs/milis/talimatname"
    declare -x TERM="screen"

5. MPS önsistem için hazırlanıp, kontrol edilir:

.. code:: bash

    cd ~/mps
    bash derle.sh

    mlfs@makine1:~/mps$ mps.lua -v
    MPS 2.0.0 - Milis Paket Sistemi milisarge@gmail.com

6. Önsistem derlenmeye başlanır:

.. code:: bash

    cd ~/milis
    ./01-onsistem.sh

.. note::
    Sertifika ilgili bir hata oluşursa,

    ::

        export WGET_GENEL_PARAM="--no-check-certificate"

    komutu derlemeden önce verilerek sertifika denetimi kapatılabilir.

7. Önsistem derlemesi Lua ile bittiğinde ve 'talimatname/0/order' dosyası içindeki paketlerin kurulduğundan 
emin olunduktan sonra önsistem sıkıştırılarak yedeklenir:

.. code:: bash

    ./onsistem_sfs.sh

8. Temel sistem paketlerinin hazırlanması için yeni derleme ortamına girilir: 

.. note::
    Temel sistem üretimi ertlenmek veya sfs kullanarak yapılmak istenirse:

    .. code:: bash

        unsquashfs onsistem-tarih-saat-degeri.sfs
        mv squashfs-root ${ONSISTEM_CHROOT}

Buradan sonraki işlemler sudo yetkileri ile yapılmalıdır:

.. code:: bash

    exit
    cd /home/mlfs/milis
    sudo su
    bash --rcfile ../.bashrc

    ./02-enter-chroot-tools

    # aşağıdaki çıktıyı görmeniz gerekir.
    Chroot ortamı bağlanıyor...
    mount: /dev bound on /home/mlfs/onsistem/dev.
    mount: devpts mounted on /home/mlfs/onsistem/dev/pts.
    mount: proc mounted on /home/mlfs/onsistem/proc.
    mount: sysfs mounted on /home/mlfs/onsistem/sys.
    mount: tmpfs mounted on /home/mlfs/onsistem/run.
    temel sistem talimatları kopyalandı.
    '/etc/ssl/certs/ca-certificates.crt' -> '/home/mlfs/onsistem/tools/etc/ssl/certs/ca-certificates.crt'
    '/etc/resolv.conf' -> '/home/mlfs/onsistem/tools/etc/resolv.conf'

9. Temel sistem içine girildikten sonra ulaşılması gereken komut satırı:

.. code:: bash

    (temel) I have no name!:/#

10. Gerekli betikler çağrılarak sistem hazırlanmaya başlanır:

.. code:: bash

    (temel) I have no name!:/# 03-temel-dosya-sistemi-hazirla

.. note::
    Bu aşamada ulaşılması gerek komut satırı bu şekildedir:

    .. code:: bash

        bash-5.0#


.. code:: bash

    bash-5.0# 04-mps-hazirla 

Bu aşamada mps'in doğru sürümünün kurulu olduğunu test etmek için:

.. code:: bash

    bash-5.0# mps.lua -v
    MPS 2.0.0 - Milis Paket Sistemi milisarge@gmail.com

.. code:: bash

    bash-5.0# 05-temel-sistemi-derle.sh

Bash derlenip kurulduktan sonra aşağıdaki çıktı ile derleme duracaktır:

::

    # bash_refresh  komutu verip tekrar devam edin!

Aşağıdaki komut verilerek, derleme yeni bash ile kaldığı yerden devam edecektir:

.. code:: bash

    bash-5.0# bash_refresh
    bash-5.0# 05-temel-sistemi-derle.sh

.. note::
    Yeni bash ten sonra ortamdan çıkma durumu olursa yeniden ortam girmek için:

    .. code:: bash

        ./02.1-enter-chroot
        bash-5.0# 05-temel-sistemi-derle.sh

11. Canlı(Live) imajda kullanmak üzere initramfs üretilir:

.. code:: bash

    dracut -N --force --xz --add 'dmsquash-live pollcdrom' --omit systemd /boot/initramfs_live `ls /usr/lib/modules`

12. Temel sistem derlemesi bittikten sonra derleme logları ve temel sistem incelenir:

Aşağıdaki komutların çıktıları olmamalı:

.. code:: bash

    bash-5.0# grep -l 'compilation terminated' /tmp/*.log
    bash-5.0# grep -l '.h: No such file or directory' /tmp/*.log

    find /var/lib/mps -name kurulan -size 0

    # kırık linklerin kontrolü
    rm -rf /tools
    find /usr -xtype l

Aşağıdaki komutun çıktısı ise 'TM' olmalı:

.. code:: bash

    [ `ls /var/lib/mps/db | wc -l` -eq `cat /usr/milis/talimatname/1/order | wc -l` ] && echo "TM"
    
13. Canlı imajda kullanmak üzere root şifresi oluşturulur: (Öntanımlı **toor**)

.. code:: bash

    passwd

14. Temel sistem gereksiz dosyalardan arındırılır ve sfs yedeklenir:

.. code:: bash

    exit 

    cd /home/mlfs/milis
    ./temel_sfs.sh

15.  Güncel MPS yüklenir ve gerekli ayarlamalar yapılır:

.. code:: bash

    cp onsistem/etc/bash.bashrc onsistem/root/.bashrc

    cd /home/mlfs/mps
    git pull

    cd /home/mlfs
    rm -rf onsistem/usr/milis/mps
    cp -rf mps onsistem/usr/milis/

    # **temel sistemin içine tekrar gireriz**
    ./02.1-enter-chroot
    (temel) root:/# cd /usr/milis/mps
    (temel) root:/# echo "export MPS_PATH=/usr/milis/mps" >> /root/.bashrc
    (temel) root:/# echo "export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:\$MPS_PATH/bin" >> /root/.bashrc
    (temel) root:/# source /root/.bashrc
    (temel) root:/# sh derle.sh

    # sürüm numarası alınarak MPS kurulum doğrulanır.
    # mps -v
    2.0.0

    # bashrc profile kopyalanarak chroot ortamdan çıkış yapılır.
    cp /root/.bashrc /etc/profile
    exit

16.  İmaj üreticinin kullanılarak temel canlı imajın üretilmesi:

.. code:: bash

    cd /home/mlfs
    git clone https://notabug.org/milislinux/imaj-uretici-2

    cd imaj-uretici-2
    ./iso_olustur.sh


